﻿/**************************************************************
 *
 * 唯一标识：ac5467f2-4cd0-412c-adbd-fb480e2158a2
 * 命名空间：Sgr.EntityFrameworkCore
 * 创建时间：2023/8/4 16:11:47
 * 机器名称：DESKTOP-S0D075D
 * 创建者：antho
 * 电子邮箱：fengqinhua2016@163.com
 * 描述：
 *
 **************************************************************/

using Microsoft.EntityFrameworkCore;

namespace Sgr.EntityFrameworkCore
{
    /// <summary>
    /// 整个工程中通用的DbContext
    /// 模块中如果未定义DbContext，则可以直接使用这个DbContext
    /// 一般情况下，建议各个模块定义自己独立的DbContext
    /// </summary>
    public class SgrDbContext : UnitOfWorkDbContext
    {
        private readonly IEnumerable<IEntityFrameworkTypeProvider> _configurations;

        public SgrDbContext(DbContextOptions<SgrDbContext> options, IEnumerable<IEntityFrameworkTypeProvider> configurations) : base(options)
        {
            _configurations = configurations ?? throw new ArgumentNullException(nameof(configurations));
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            foreach (var conf in _configurations)
            {
                conf.RegisterEntities(modelBuilder, this.GetDatabaseType());
            }

            // 为所有实体的 DateTime / DateTime? 属性应用 UTC 值转换器
            modelBuilder.ApplyUtcDateTimeConverters();
        }
    }
}